package servlets;

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Iterator;
import java.util.List;

import javax.imageio.ImageIO;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;


import coneccion.DocumentoIdentidadConsultas;
import coneccion.CandidatosConsultas;

import objetos.DocumentoIdentidad;
import objetos.Candidato;
import utils.Constantes;

/**
 * 
 */
public class CandidatosGuardarFotos extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public CandidatosGuardarFotos() {
        super();

    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}
	
	protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
		
		request.setCharacterEncoding( "UTF-8");
		Boolean error = Boolean.TRUE;
		String accion = null;
		String id = request.getParameter("id");
		
		FileItem fotoCandidato = null;
		FileItem fotoPartidoPolitico = null;
		List fileItemsList = null;
		try {
			if (ServletFileUpload.isMultipartContent(request)){
				ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
				
					fileItemsList = servletFileUpload.parseRequest(request);
				
				Iterator it = fileItemsList.iterator();
				while (it.hasNext()){
					  FileItem fileItem = (FileItem)it.next();
					  
					  //el item es un parametro del formulario 
					  if (fileItem.isFormField()){
						  if("accion".equals(fileItem.getFieldName())){
							  accion = fileItem.getString();
						  }else if("id".equals(fileItem.getFieldName())){
							  id = fileItem.getString();
						  }
					  }else{ //el item es un archivo
						  if("fotoCandidato".equals(fileItem.getFieldName())){
							  fotoCandidato = fileItem;
						  }else if("fotoPartidoPolitico".equals(fileItem.getFieldName())){
							  fotoPartidoPolitico = fileItem;
						  }
					  }
				}
			}
		} catch (FileUploadException e) {
			error = Boolean.TRUE;
			e.printStackTrace();
		}
		Candidato candidato = new Candidato();
		Integer idInt = null;
		
		if(accion!=null && accion.length()>0){
			try{
				if(id!=null && id.length()>0){
					idInt = Integer.valueOf(id);
				}
			}catch (Exception e) {
				idInt = null;
			}
			candidato.setId(idInt);
			
			if(Constantes.FORM_ACTUALIZAR.equals(accion) && idInt != null){
			 		error = !guardarArchivos(request, response, candidato, fotoCandidato, fotoPartidoPolitico);
			}
		}
		
		response.sendRedirect("CandidatosForm?id="+id+"&accion=ACTUALIZAR&errorExitoFoto="+(error?"error":"exito"));
		
	}
		
				
	

	
	private Boolean guardarArchivos(HttpServletRequest request, HttpServletResponse response, Candidato candidato, FileItem fotoCandidato, FileItem fotoPartidoPolitico){
		Boolean result = Boolean.FALSE;
		String direccion = request.getSession().getServletContext().getRealPath("imagesCandidatos");
		if (ServletFileUpload.isMultipartContent(request)){
			ServletFileUpload servletFileUpload = new ServletFileUpload(new DiskFileItemFactory());
			try {
				CandidatosConsultas candidatosConsultas = new CandidatosConsultas();
				Candidato candidatoConsultado = candidatosConsultas.getCandidato(candidato);
				Date date = new Date();
				SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
				
				File file = new File(direccion + "\\" + candidatoConsultado.getFotoCandidato());
				  
				if(fotoCandidato!= null && fotoCandidato.getSize()>0){
					if(file.exists()){
						file.delete();
					}
					file = new File(direccion + "\\fotoCandidato" + candidato.getId() + sdf.format(date) + ".png");
				
					//grabo el nuevo archivo en disco
					fotoCandidato.write(file);
					candidatoConsultado.setFotoCandidato("fotoCandidato"+candidato.getId()+ sdf.format(date) + ".png");
					
				}
				
			
				File file2 = new File(direccion + "\\"+candidatoConsultado.getFotoPartidoPolitico());
				
				if(fotoPartidoPolitico!=null && fotoPartidoPolitico.getSize()>0){
					if(file2.exists()){
						file2.delete();
					}
					
					file2 = new File(direccion + "\\fotoPartidoPolitico" + candidato.getId() + sdf.format(date) + ".png");
				
					//grabo el nuevo archivo en disco
					fotoPartidoPolitico.write(file2);
					candidatoConsultado.setFotoPartidoPolitico("fotoPartidoPolitico"+candidato.getId()+ sdf.format(date) +".png");
					
				}
				
				result = candidatosConsultas.actualizarImagenesCandidato(candidatoConsultado);
				
			} catch (FileUploadException e) {
				result = Boolean.FALSE;
				e.printStackTrace();
			} catch (Exception e) {
				result = Boolean.FALSE;
				e.printStackTrace();
			}
		}
		return result;
	}
}
